package com.bluexmicro.utils

import java.nio.ByteBuffer
import java.nio.ByteOrder

class ByteUnit {

    var bytes: ByteArray
        private set

    constructor(vararg bytes: Byte) {
        this.bytes = bytes
    }

    constructor(short: Short, order: ByteOrder = ByteOrder.BIG_ENDIAN) {
        val bb = ByteBuffer.allocate(2).order(order)
        bb.putShort(short)
        this.bytes = bb.array()
    }

    constructor(int: Int, order: ByteOrder = ByteOrder.BIG_ENDIAN) {
        val bb = ByteBuffer.allocate(4).order(order)
        bb.putInt(int)
        this.bytes = bb.array()
    }

}

class ByteForm(vararg units: ByteUnit) {

    var bytes: ByteArray
        private set

    init {
        var len = 0
        for (unit in units) {
            len += unit.bytes.size
        }
        val bb = ByteBuffer.allocate(len).order(ByteOrder.BIG_ENDIAN)
        for (unit in units) {
            bb.put(unit.bytes)
        }
        bytes = bb.array()
    }

}
